# 哋它亢技术已经成为近一个月来受到各大高校计算机学科学生的广泛关注，其相关技术开发的热潮如火如荼。
# 其中哋它亢技术开发组的前沿研究最为权威。
# 本项目基于https://datacon-13765.xyz分享的哋它亢技术进行了学习通劳动教育慕课自动化学习的脚本开发。
# 仅作学习示例，希望能为各位哋它亢学习者起到引入的作用。

import pyautogui
import time
import keyboard  # 用于监听键盘事件
import sys  # 导入 sys 模块
import ctypes  # 导入 ctypes 模块用于窗口操作
import platform  # 导入 platform 模块以确定操作系统

# 定义全局变量，控制程序运行状态
running = True

# 定义函数，用于最小化终端窗口（仅适用于 Windows 系统）
def minimize_console_window():
    if platform.system() == "Windows":
        try:
            # 获取当前控制台窗口的句柄
            hwnd = ctypes.windll.kernel32.GetConsoleWindow()
            if hwnd != 0:
                # 6 是 SW_MINIMIZE 的值，用于最小化窗口
                ctypes.windll.user32.ShowWindow(hwnd, 6)
                print("终端窗口已最小化。")
                time.sleep(3)
        except Exception as e:
            print(f"最小化终端窗口时出错：{e}")
    else:
        print("当前系统不支持自动最小化终端窗口。")

# 定义 ESC 键的回调函数
def on_esc_press(event):
    global running
    print("检测到 ESC 键，退出程序...")
    running = False
    # 停止监听键盘事件
    keyboard.unhook_all()
    # 使用 sys.exit() 退出程序
    sys.exit()

# 注册 ESC 键的监听事件
keyboard.on_press_key('esc', on_esc_press)

# 定义函数，用于查找图像在屏幕上的位置
def find_image(image_name, confidence=0.9):
    try:
        location = pyautogui.locateOnScreen(image_name, confidence=confidence)
        if location is not None:
            print(f"找到 '{image_name}'，匹配度 {confidence}")
        return location
    except Exception as e:
        print(f"查找 '{image_name}' 时出错：{e}")
        return None

# 定义函数，用于查找所有匹配的图像
def find_all_images(image_name, confidence=0.993):
    try:
        locations = list(pyautogui.locateAllOnScreen(image_name, confidence=confidence))
        if locations:
            print(f"找到多个 '{image_name}'，共 {len(locations)} 个")
        return locations
    except Exception as e:
        print(f"查找所有 '{image_name}' 时出错：{e}")
        return []

# 定义函数，用于点击图像
def click_image(image_name, confidence=0.9):
    location = find_image(image_name, confidence)
    if location:
        center = pyautogui.center(location)
        pyautogui.click(center)
        print(f"点击了 '{image_name}'")

# 清除缓存并退出程序
def clear_cache_and_exit():
    global running
    print("正在清除缓存...")
    print("缓存已清除，程序即将退出...")
    running = False
    # 停止监听键盘事件
    keyboard.unhook_all()
    sys.exit()

# 主函数，按照指定的步骤执行操作
def main():
    global running
    # 最小化终端窗口
    minimize_console_window()

    print("程序运行中... 按 ESC 键退出程序。developedBY.datacon-13765.xyz.遇技术问题请联系vx：ISleepAllTheDay")
    while running:
        # 步骤 1：再识别 'begin.jpg' 是否存在
        if find_image('begin.jpg'):
            print("检测到 'begin.jpg'")
            # 步骤 2：点击 'startplay.jpg'，confidence 调整为 0.6
            click_image('startplay.jpg', confidence=0.4)
            # 等待 'complete.jpg' 出现
            print("等待 'complete.jpg' 出现...")
            while running and not find_image('complete.jpg'):
                time.sleep(1)
            if not running:
                break
            print("检测到 'complete.jpg'")
            # 继续执行步骤 3
        else:
            # 步骤 5：检查 'complete.jpg' 是否存在
            if find_image('complete.jpg'):
                print("检测到 'complete.jpg'，执行步骤 3")

            else:
                print("未检测到 'begin.jpg' 和 'complete.jpg'，直接执行步骤 3")

        # 步骤 3：寻找 'renwudian.jpg' 并计算数量
        renwudian_list = find_all_images('renwudian.jpg')
        if renwudian_list:
            count = len(renwudian_list)
            if count == 1:
                # 只有一个，移动鼠标到中心并向下滚动滚轮 300 单位
                location = renwudian_list[0]
                center = pyautogui.center(location)
                pyautogui.moveTo(center)
                pyautogui.scroll(-300)
                print("只有一个 'renwudian.jpg'，已滚动滚轮 300 单位")
            else:
                # 有多个，移动鼠标到最上面的一个并点击，然后重复步骤 1 和 2
                topmost = min(renwudian_list, key=lambda loc: loc.top)
                center = pyautogui.center(topmost)
                pyautogui.moveTo(center)
                pyautogui.click()
                time.sleep(5)
                print("有多个 'renwudian.jpg'，已点击最上面的一个，重复步骤 1 和 2")
                continue  # 重新开始循环，重复步骤 1 和 2
        else:
            print("未找到 'renwudian.jpg'，清除缓存并退出程序...developedBY.datacon-13765.xyz.遇技术问题请联系vx：ISleepAllTheDay")
            clear_cache_and_exit()

        # 等待一段时间再进行下一次循环，避免过快执行导致的问题
        time.sleep(1)

if __name__ == '__main__':
    main()
